﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ITProject.Repository.Abstract;
using System.ComponentModel.DataAnnotations;

namespace ITProject.WebUI.Models.Message
{
    /// <summary>
    /// Klasa modelu widokowego listy odebranych wiadomości.
    /// Autor: Jakub Szatkowski
    /// </summary>
    public class MessageInboxViewModel
    {
        [Required]
        [MaxLength]
        public string Subject { get; set; }
        public DateTime DateOfSend { get; set; }
        public bool Readed { get; set; }
        public string Sender { get; set; }
        public int Id { get; set; }

        /// <summary>
        /// Statyczna metoda viewModelu do konwersji listy wiadomości (encji) do listy obiektów modelu widokowego MessageInboxViewModel, które można wyświetlić w skrzynce.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="messages">Kolekcja encji wiadomości.</param>
        /// <param name="userRepo">Repozytorium użytkowników do pobrania nadawcy.</param>
        /// <returns>Kolekcja obiektów MessageInboxViewModel</returns>
        public static IEnumerable<MessageInboxViewModel> Convert(IEnumerable<ITProject.Domain.Entities.Message> messages,IUserRepository userRepo)
        {
            MessageInboxViewModel[] messagesViewModel = new MessageInboxViewModel[messages.Count()];
            int i=0;
            foreach (ITProject.Domain.Entities.Message message in messages)
                messagesViewModel[i++] = Convert(message,userRepo);
            return messagesViewModel;
        }

        /// <summary>
        /// Statyczna metoda do konwersji pojedyńczej encji wiadomości do obiektu modelu widokowego MessageInboxViewModel.
        /// Autor: Jakub Szatkowski
        /// </summary>
        /// <param name="message">Encja wiadomości.</param>
        /// <param name="userRepo">Repozytorium użytkowników do pobrania nadawcy.</param>
        /// <returns>Obiekt MessageInboxViewModel gotowy do wyświetlenia w skrzynce.</returns>
        public static MessageInboxViewModel Convert(ITProject.Domain.Entities.Message message,IUserRepository userRepo)
        {
            MessageInboxViewModel messageViewModel = new MessageInboxViewModel();
            messageViewModel.DateOfSend = message.DateOfSend;
            messageViewModel.Readed = message.Readed;
            messageViewModel.Subject = message.Subject;
            messageViewModel.Id = message.Id;
            messageViewModel.Sender = userRepo.GetUserById(message.Sender).Login;
            return messageViewModel;
        }
    }
}